﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.Entity;
using System.Transactions;
using System.Data.Objects;
using System.Threading;

namespace SisVet.VendasAvulsasModelo
{
    public class VendasAvulsasDAL
    {
        SisVetEntities contexto = new SisVetEntities();

        public List<Vendas> ListarVendasAvulsas()
        {
            DateTime dataMax = DateTime.Today.AddHours(23).AddMinutes(59).AddSeconds(59);
            var a = from p in contexto.Vendas
                    where p.DtVenda >= DateTime.Today && p.DtVenda <= dataMax
                    select p;

            return a.ToList();
        }

        public bool ExisteServico(int codigo)
        {        
            var serv = contexto.Servicos.Find(codigo);
            if (serv != null)
                return true;
            else
                return false;

        }

        public Servicos BuscarServicoPorId(int codigo)
        {
            var servico = (from p in contexto.Servicos
                          where p.CdServico == codigo
                          select p).FirstOrDefault();                  
            
            return servico;
        }

        public void LancarVendaAvulsa(int CodServico, int Quantidade, double TotalVenda)
        {
            var servi = (from p in contexto.Servicos
                             where p.CdServico == CodServico
                             select p).FirstOrDefault();


            if (Quantidade > Convert.ToInt32(servi.Quantidade))
            {
                MessageBox.Show("A quantidade é maior que o estoque disponível para este produto!");                
                return;
            }

            else
            {   //fazer transaction para caso uma query de erro a outra nao seja executada
                //  using (TransactionScope scope = new TransactionScope())
                //  {
                Vendas vendaAvulsa = new Vendas() { CdServico = CodServico, QtdVendido = Quantidade, TotalVenda = TotalVenda, DtVenda = System.DateTime.Now };
                contexto.Vendas.Add(vendaAvulsa); // importante, pois aqui ocorre o comando INSERT
                contexto.SaveChanges(); // aqui concretizo o insert, inserindo no DB

                int novoEstoque = Convert.ToInt32(servi.Quantidade) - Quantidade;

                servi.Quantidade = novoEstoque;

                contexto.SaveChanges();//colocar false como paremetro aqui e depois chamar AcceptAllChanges() quando Transaction estiver funcionando
                MessageBox.Show("Salvo com sucesso!");

                // }

            }
        }     


    }
}
